package com.winsdom.utils;

import com.alibaba.fastjson.JSON;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @Author: 陈文平
 * @CreateTime: 2025-05-09-17:12
 * @Description: 短信模板工具类：将模板中的占位符替换为实际的参数值
 * @Version: 1.0
 */
public class SmsUtil {
    /**
     *
     * @param params Map对象，包含需要替换的参数名和对应的值
     * @param template 一个字符串，表示短信模板
     * @return 返回一个字符串，表示替换后的短信内容
     */
    public static String processTemplate(Map<String, String> params, String template) {
        // 正则表达式——>匹配 {【参数】} 格式 ,其中参数为占位符的实际内容
        String reg = "\\{【(.*?)】\\}";
        Pattern pattern = Pattern.compile(reg); /*将正则表达式编译成一个pattern对象*/
        Matcher matcher = pattern.matcher(template); /*创建Matcher对象，用于在模板字符串中查找匹配的占位符*/
        while (matcher.find()) {
            String group = matcher.group(); /*获取完整匹配项（如 {【客户名称】}）*/
            String key = matcher.group(1);  /*提取参数名（如 客户名称）*/
            if (!params.containsKey(key)) {  /*检查Map对象*/
                throw new IllegalArgumentException("未找到需要替换的 key：" + key); /*如果Map对象中不包含该参数名，则抛出异常*/
            }
            template = template.replace(group, params.get(key)); /*将占位符替换为实际的参数值*/
        }
        return template;
    }

    // 生成键值对JSON参数（用于阿里云TemplateParam）
    public static String processTemplateToJson(Map<String, String> params, String template) {
        // 步骤1：提取模板中的所有占位符（如"客户名称", "账单金额"）
        List<String> paramKeys = new ArrayList<>();
        Pattern pattern = Pattern.compile("\\{【(.*?)】\\}");
        Matcher matcher = pattern.matcher(template);
        while (matcher.find()) {
            String key = matcher.group(1); // 提取占位符名称（如"客户名称"）
            paramKeys.add(key);
        }

        // 步骤2：校验所有占位符对应的参数是否存在（避免参数缺失）
        for (String key : paramKeys) {
            if (!params.containsKey(key)) {
                throw new IllegalArgumentException("未找到需要替换的 key：" + key);
            }
        }

        // 步骤3：构建键值对Map（占位符名称为键，参数值为值）
        Map<String, String> templateParams = new HashMap<>();
        for (String key : paramKeys) {
            templateParams.put(key, params.get(key)); // 键：占位符名称，值：参数值
        }

        // 步骤4：将键值对Map转换为JSON字符串（正确格式）
        return JSON.toJSONString(templateParams);
    }
}
